home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 110 / EnigmaAmiga110CD.iso / kit internet / utility / amirc_34 / rexx / song.amirx < prev    next >
Text File  |  2000-01-01  |  4KB  |  155 lines

  1. /*
  2. \\ Song.amirx 2.3 -- Announce which tune is playing
  3. // Copyright ©1998-2000 Jamie van den Berge <entity@vapor.com>
  4. \\
  5. // Supports DeliTracker, SongPlayer, AMPlifier, EaglePlayer, HippoPlayer and AmigaAMP
  6. \\
  7. // Usage: /RX Song
  8. \\
  9. */
  10.  
  11. SIGNAL ON SYNTAX
  12.  
  13. OPTIONS RESULTS
  14.  
  15. port = ADDRESS()
  16.  
  17. pattern = 0; patterns = 0
  18. subsong = 0; subsongs = 0
  19. playing = 0
  20.  
  21. title  = ""; filename = ""
  22. author = ""
  23. not    = ""
  24.  
  25. IF SHOW( "P", "DELITRACKER"  ) THEN SIGNAL DELITRACKER
  26. IF SHOW( "P", "AMPLIFIER.1"  ) THEN SIGNAL AMPLIFIER
  27. IF SHOW( "P", "SONGPLAYER.1" ) THEN SIGNAL SONGPLAYER
  28. IF SHOW( "P", "rexx_EP"      ) THEN SIGNAL EAGLEPLAYER
  29. IF SHOW( "P", "HIPPOPLAYER"  ) THEN SIGNAL HIPPOPLAYER
  30. IF SHOW( "P", "AMIGAAMP"     ) THEN SIGNAL AMIGAAMP
  31.  
  32. CALL LOCAL( "«Song»", 3, "No supported player found running" )
  33. EXIT
  34.  
  35. /*
  36. \\ Gather relevant data about the tune currently playing
  37. */
  38.  
  39. /* AMPlifier */
  40. AMPLIFIER:
  41.     ADDRESS "AMPLIFIER.1"
  42.     GETTAGINFO STEM tag
  43.     QUERYSELECTED NAME
  44.     filename = MYFILEPART( RESULT )
  45.  
  46.     "PLAYSTATE";
  47.     IF RESULT = 1 THEN not = "not "
  48.     IF RESULT = 2 THEN not = "temporarily not "
  49.     
  50.     IF( tag.ready = 1 ) THEN DO
  51.         DROP title author
  52.         title = tag.title
  53.         author = tag.artist
  54.     END
  55.  
  56.     SIGNAL REPORT
  57.  
  58. /* AmigaAMP */
  59. AMIGAAMP:
  60.     "SAY /ME is playing an mp3, though he has no clue which one as AmigaAMP lacks crucial ARexx commands"
  61.     EXIT
  62.  
  63. /* DeliTracker II */
  64. DELITRACKER:
  65.     ADDRESS "DELITRACKER"
  66.  
  67.     "STATUS G ply"; IF RESULT = 'no' THEN not = "not "
  68.     "STATUS M nam"; title = STRIP( RESULT )
  69.     "STATUS M fil"; filename = RESULT
  70.  
  71.     SIGNAL REPORT
  72.  
  73. /* EaglePlayer2 */
  74. EAGLEPLAYER:
  75.     ADDRESS "rexx_EP"
  76.     "STATUS G ply"; IF RESULT = "no" THEN not = "not "
  77.     "STATUS M son"; title = STRIP( RESULT )
  78.     "STATUS M fil"; filename = RESULT
  79.     subsong2 = 0
  80.  
  81.     "STATUS M len"; IF RESULT ~= "RESULT" THEN patterns = RESULT
  82.     "STATUS M pon"; IF RESULT ~= "RESULT" THEN pattern  = RESULT
  83.     "STATUS M aut"; IF RESULT ~= "RESULT" THEN author   = RESULT
  84.     "STATUS G snd"; IF RESULT ~= "RESULT" THEN subsong  = RESULT
  85.     "STATUS M min"; IF RESULT ~= "RESULT" THEN subsong2 = RESULT
  86.     "STATUS M max"; IF RESULT ~= "RESULT" THEN subsongs = RESULT
  87.  
  88.     IF ( not ~= "" ) & ( pattern > 0 ) THEN not = "temporarily not "    /* assume pause */
  89.  
  90.     IF subsong2 = 0 THEN
  91.         subsongs = ( subsongs - subsong2 ) + 1
  92.  
  93.     SIGNAL REPORT
  94.  
  95. /* HippoPlayer */
  96. HIPPOPLAYER:
  97.     ADDRESS "HIPPOPLAYER"
  98.  
  99.     get name; title    = STRIP( RESULT )
  100.     get cspo; pattern  = RESULT
  101.     get mspo; patterns = RESULT
  102.     get csng; subsong  = RESULT
  103.     get nsng; subsongs = RESULT
  104.     get play; IF ~RESULT THEN not = "not "
  105.  
  106.     SIGNAL REPORT
  107.     
  108. EXIT
  109.  
  110. /* SongPlayer */
  111. SONGPLAYER:
  112.     ADDRESS "SONGPLAYER.1"
  113.     GET_STATE;
  114.     IF RESULT = "PAUSE" THEN not = "temporarily not "
  115.     IF RESULT = "STOP"  THEN not = "not "
  116.  
  117.     GET_ARTIST; author = RESULT
  118.     GET_TITLE ;  title = RESULT
  119.     GET_FILEPATH; filename = MYFILEPART( RESULT )
  120.  
  121.     SIGNAL REPORT
  122. EXIT
  123.  
  124. /*
  125. \\ Generates a report from collected data
  126. */
  127. REPORT:
  128.     ADDRESS VALUE port
  129.  
  130.     status = ""
  131.     IF ( title = "" ) | ( title = "<?>" ) | ( INDEX( title, "NoName" ) > 0 ) THEN title = filename
  132.     IF ( title ~= "" ) & ( title ~= "RESULT" ) THEN DO
  133.         IF subsongs > 1 THEN status = "#"subsong"/"subsongs; ELSE status = ""
  134.         IF patterns > 1 THEN status = status pattern"/"patterns
  135.         status = STRIP( STRIP( status, "B", "," ) )
  136.         IF status ~= "" THEN status = "[" || status || "]"
  137.         IF author ~= "" THEN author = author || " - "
  138.         "SAY /ME is" not || "playing:" d2c(2) || author || title || d2c(2) status
  139.     END; ELSE DO
  140.         "SAY /ME is not playing anything"
  141.     END
  142.  
  143. EXIT
  144.  
  145. LOCAL:"ECHO P="d2c(27)"b"ARG(1)" C="ARG(2) ARG(3); RETURN
  146. SYNTAX: ADDRESS VALUE port; "ECHO" ERRORTEXT( RC ) "on line" SIGL; EXIT
  147.  
  148. MYFILEPART:
  149.     file = REVERSE( ARG(1) )
  150.     indx = INDEX( file, "/" )
  151.     IF indx > 0 THEN file = LEFT( file, indx-1 )
  152.     file = REVERSE( file )
  153. RETURN file
  154.  
  155.